package 剑指offer;

import java.util.Scanner;

/** 

* @author ：soulstones
* @version ：2019年9月30日 下午9:38:11 
* @Description：
* 
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

保证base和exponent不同时为0
*/
public class A12数值的整数次方 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		double n = scanner.nextDouble();
		int m = scanner.nextInt();
		System.out.println(Power(n, m));
	}

	//最简单的累乘方法
	public static double Power(double base, int exponent) {

		if (base == 0.0) {
			return 0.0;
		}
		// 前置结果设为1.0，即当exponent=0 的时候，就是这个结果
		double result = 1.0d;
		// 获取指数的绝对值
		int e = exponent > 0 ? exponent : -exponent;
		// 根据指数大小，循环累乘
		for (int i = 1; i <= e; i++) {
			result *= base;
		}
		// 根据指数正负，返回结果
		return exponent > 0 ? result : 1 / result;
	}
	
	
	
	//递推写法
	 public static double Power1(double base, int exp) {
		 boolean flag=false;
		 if (exp<0) {
			flag=true;
			exp=-exp;
		}
		 double ans=1;
		 while (exp>0) {
			if ((exp&1)==1) {
				ans=ans*base;
			}
			exp>>=1;
			base*=base;
		}
		 return flag?1/ans:ans;
	 }
	 
	 //递归写法
	public static double Power2(double base, int exp) {
		boolean flag = exp < 0;
		if (flag) {
			exp = -exp;
		}
		double result = getPower(base, exp);
		return flag ? 1 / result : result;
	}

	public static double getPower(double base, int exp) {
		if (exp == 0) {
			return 1;
		}
		if (exp == 1) {
			return base;
		}
		double ans = getPower(base, exp >> 1);
		ans *= ans;
		if ((exp & 1) == 1) {
			ans *= base;
		}
		return ans;
	}
	
}
